//
//  THRequestVo.h
//  THBaseApp
//
//  Created by TryHone on 16/6/3.
//  Copyright © 2016年 TryHone. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "JFBaseModel.h"


typedef NS_ENUM(NSInteger, MethodType) {
    MethodType_Post = 0,
    MethodType_Get = 1,
    MethodType_Put = 2,
    MethodType_Delete = 3,
    MethodType_Head = 4,
    MethodType_Patch = 5
};

typedef NS_ENUM(NSInteger, ServiceType) {
    ServiceType_Http = 0,
    ServiceType_Rpc = 1,
    ServiceType_WebSocket = 2,
    ServiceType_Socket = 3
};

typedef NS_ENUM(NSInteger, DataParserType) {
    DataParserType_JSON = 0,
    DataParserType_XML = 1,
    DataParserType_Socket = 998,
    DataParserType_WebSocket = 999
};


typedef NS_ENUM(NSInteger, CacheType) {
    CacheType_Net = 0, //不走缓存，直接网络请求
    CacheType_CacheOrNet = 1, //缓存命中，直接返回，未命中走网络请求,请求成功后不设置或更新缓存
    CacheType_CacheOrNet_Update = 2,   //缓存命中，直接返回，未命中走网络请求，请求成功后设置或更新缓存
    CacheType_CacheAndNet = 3,//缓存命中，回调一次，继续网络请求,请求后回调一次，不缓存或更新请求结果
    CacheType_CacheAndNet_Update //缓存命中，回调一次，继续网络请求,请求后回调一次，更新或设置缓存
};

typedef NS_ENUM(NSInteger, CerCheckMode) {
    CerCheckMode_None = 0, //不校验
    CerCheckMode_PublicKey = 1, //校验本地证书PublicKey
    CerCheckMode_Certificate //整个证书校验
};

@interface JFRequestVo : JFBaseModel
/**
 *  流水号
 */
@property (nonatomic,copy)NSString *flowNo;
/**
 *  是否post请求 默认http 协议的是post 启用属性
 */
@property (nonatomic,assign)BOOL isPost;
//请求类型
@property (nonatomic,assign) MethodType methodtype;
/**
 *  请求对象
 */
@property (nonatomic,strong)NSMutableDictionary *reqParam;
/**
 *  URL地址
 */
@property (nonatomic,copy)NSString *url;

/**
 *  基础链接地址
 */
@property (nonatomic,copy)NSString *baseUri;

/**
 *  path 地址后半段路径
 */
@property (nonatomic,copy)NSString *path;

/**
 *  是否调试 默认是非调试状态
 */
@property (nonatomic,assign,setter = setIsDebug:,getter = isDebug)BOOL isDebug;
/**
 *  调用开始时间
 */
@property (nonatomic,assign)NSTimeInterval beginTime;

/**
 *  请求超时时间，单位秒
 */
@property(nonatomic,assign)NSInteger timeOut;

/**
 *  @author Alan, 17-06-17 16:06:06
 *
 *  @brief 网络请求缓存策略 默认不缓存直接请求
 */
@property (nonatomic,assign) CacheType cacheType;

/**
 *  @author Alan, 17-06-17 16:06:06
 *
 *  @brief 请求协议 默认是Http协议
 */
@property (nonatomic,assign) ServiceType ServiceType;
/**
 *  @author Alan, 17-06-17 16:06:06
 *
 *  @brief 自定义处理类
 */
@property (nonatomic,copy) NSString * ServiceName;


/**
 *  设置改请求解析的类型
 */
@property(nonatomic,assign)NSInteger dataparsertype;

/**
 *  @author Alan, 18-10-19
 *
 *  @brief 自定义数据解析类
 */
@property (nonatomic,copy) NSString * dataparserServiceName;


/**
 *  增加请求头
 */
@property(nonatomic,copy)NSDictionary * header;
/**
 *  是否开启安全校验
 */
@property(nonatomic,assign) BOOL security;

/**
 *  错误码是否转发到全局拦截器 默认是YES
 */
@property(nonatomic,assign) BOOL forwardErrorCode;

/**
 *  是否需要在主线程回调 值修改只对异步请求有效
 */
@property(nonatomic,assign) BOOL isBackInMain;

//////////////////////////////////////////////
//pmark mark-- security  = YES 以下配置生效

//客户端是否信任非法证书 默认信任
@property(nonatomic,assign) BOOL allowInvalidCertificates;
//是否校验在证书中的domain这一个字段  默认不校验
@property(nonatomic,assign) BOOL validatesDomainName;
//默认不校验
@property (nonatomic,assign) CerCheckMode cerCheckMode;

/////////////////////////////////////////////////////////


@end
